package org.fjsei.yewu.service.third;
//HttpClient 注意5.x版本中的许多类和接口都与4.x版本不兼容。
import org.apache.hc.client5.http.classic.HttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.cookie.CookieStore;
import org.apache.hc.client5.http.cookie.BasicCookieStore;
import org.apache.hc.client5.http.impl.cookie.BasicClientCookie;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.io.IOException;
import java.util.List;

/*较为通用：公用的接口基础收发；对应不同的外部对接平台。
* */
@Service
public class CookieManagingService {
    //RestTemplate不是线程安全的，因此如果你在多线程环境中使用它，请确保每个 线程 都有自己的RestTemplate实例，或者同步对共享RestTemplate实例的访问
    private  RestTemplate restTemplate;
    //保存会话的状态 ： 访问是 同一个网站对接的就一直保持相同不变的。
    private  CookieStore cookieStore;
    private String authorization;

    public CookieManagingService() {
        this.cookieStore =new BasicCookieStore();
        CloseableHttpClient httpClient = HttpClients.custom()
                .setDefaultCookieStore(cookieStore)
                .build();
        this.restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory(httpClient));
        // 添加拦截器来管理cookie（这里只是一个示例，实际实现可能更复杂）
        this.restTemplate.setInterceptors(List.of(new ClientHttpRequestInterceptor() {
            @Override
            public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {

                request.getHeaders().add("authorization", authorization);
                // 在这里可以添加逻辑来从cookieStore中获取cookie并添加到请求中
                // 但由于HttpComponentsClientHttpRequestFactory已经处理了cookie，这里通常不需要额外操作
                return execution.execute(request, body);
            }
        }));
    }
    /**直接给它凭证的模式： 切换：不同链接的网站？
    **/
    public void putExpiresToken(String expireCookies,String token) {
        cookieStore.clear();
        BasicClientCookie cookie = new BasicClientCookie("Admin-Expires-In", expireCookies);	//第三方服务授权访问不一样
        cookieStore.addCookie(cookie);
        authorization="Bearer "+token;
    }
    // 提供其他方法来发送HTTP请求
    public RestTemplate getRestTemplate() {
        return restTemplate;
    }
}
